#!/bin/bash
echo "===== 开始内存调优 ====="
# 记录开始时间
start_time=$(date +%s.%N)
# 权限检查
if [ "$EUID" -ne 0 ]; then
    echo "脚本必须以root用户运行"
    exit 1
fi
# 初始化日志文件
LOG_FILE="memory_tuning.log"
echo "===== 内存调优日志 ====="> $LOG_FILE
# 调整numad配置以优化内存分配策略
if numad -D /etc/numad.conf; then
    echo "已应用numad内存优化配置" >> $LOG_FILE
else
    echo "警告：无法应用numad配置，可能需要手动检查权限和配置文件">> $LOG_FILE
fi
# 调整脏页写回参数以缓解缓存压力
echo 20 > /proc/sys/vm/dirty_ratio
echo 100 > /proc/sys/vm/dirty_writeback_centis
echo "已调整dirty_ratio为20%和dirty_writeback_centis为100ms">> $LOG_FILE
# 启用earlyoom以预防内存不足
if earlyoom --start; then
    echo "已启用earlyoom守护进程">> $LOG_FILE
else
    echo "警告：无法启动earlyoom服务，可能需要检查配置">> $LOG_FILE
fi
# 收集指标数据
memory_usage=$(free -m | awk '/Mem:/ {print $3}')
dirty_pages=$(cat /proc/meminfo | grep Dirty: | awk '{print $2}')
swap_usage=$(free -m | awk '/Swap:/ {print $3}')
# 调整写回策略以优化内存释放
echo 1 > /proc/sys/vm/compact_memory
echo "已启用内存紧凑机制">> $LOG_FILE
# 记录结束时间
end_time=$(date +%s.%N)
duration=$(echo "$end_time - $start_time" | bc)
# 结构化输出性能指标
echo "===== 调优效果 ====="
echo "总执行时间: ${duration}秒"
echo "内存使用量: ${memory_usage}MB"
echo "脏页数量: ${dirty_pages}KB"
echo "交换分区使用量: ${swap_usage}MB"
# 结构化输出到文件
echo '{
    "total_time": "'$duration'",
    "memory_usage": "'$memory_usage' MB",
    "dirty_pages": "'$dirty_pages' KB",
    "swap_usage": "'$swap_usage' MB"
}' >> $LOG_FILE
echo "===== 调优完成 ====="